
public class Simbolo
{
	
	public static final Integer
			ENTERO = 0,
			REAL = 1,
			FUNCION = 2,
			INT = 3,
			DOUBLE = 4;

	private Integer nivel;
	private Integer tipo;
	private String nombre;
	private String padre;

	/**
	 * Constructor.
	 * @param nivel Nivel del ámbito en el que se encuentra la variable con respecto a la función contenedora.
	 * @param tipo Tipo de la variable.
	 * @param nombre Nombre de la variable.
	 * @param padre Nombre de la función contenedora de la variable.
	 */
	public Simbolo(Integer nivel, Integer tipo, String nombre, String padre)
	{
		this.nivel = nivel;
		this.tipo = tipo;
		this.nombre = nombre;
		this.padre = padre;
	}
	
	/**
	 * Compara dos simbolos.
	 * @param s Simbolo a comparar.
	 * @return Cierto si son iguales, falso en caso contrario.
	 */
	public boolean equals(Simbolo s)
	{
		return ( s.nombre.equals(this.nombre) && s.nivel == this.nivel && s.padre.equals(this.padre) );
	}
	
	/**
	 * Devuelve el tipo del simbolo.
	 * @return Tipo de simbolo.
	 */
	public Integer getTipo()
	{
		return tipo;
	}

	/**
	 * Cambia el tipo del simbolo.
	 * @param tipo NUevo tipo del simbolo.
	 */
	public void setTipo(Integer tipo)
	{
		this.tipo = tipo;
	}

	/**
	 * Cambia el nivel del simbolo.
	 * @param nivel Nuevo nivel del simbolo.
	 */
	public void setNivel(Integer nivel)
	{
		this.nivel = nivel;
	}

	/**
	 * Cambia el nombre del simbolo.
	 * @param nombre Nuevo nombre.
	 */
	public void setNombre(String nombre)
	{
		this.nombre = nombre;
	}

	/**
	 * Cambia le nomrbe de la función contenedora.
	 * @param padre Nombre de la función contenedora.
	 */
	public void setPadre(String padre)
	{
		this.padre = padre;
	}

	/**
	 * Obtiene el nivel del simbolo.
	 * @return Nivel del simbolo.
	 */
	public Integer getNivel()
	{
		return nivel;
	}

	/**
	 * Obitiene el nombre del simbolo
	 * @return Nombre del simbolo.
	 */
	public String getNombre()
	{
		return nombre;
	}

	/**
	 * Obtiene el nombre de la función contenedora del simbolo.
	 * @return Nombre de la función padre.
	 */
	public String getPadre()
	{
		return padre;
	}
	
	@Override
	public String toString()
	{
		StringBuilder builder = new StringBuilder();
		
		builder.append(padre);
		
		for ( int i = 0; i < nivel; i++ )
		{
			builder.append("_");
		}
		builder.append(nombre);
		return builder.toString();
	}
}
